0x608060405234801561001057600080fd5b50600436106101985760003560e01c8063a217fddf116100e3578063df38461e1161008c578063fb81dff111610066578063fb81dff1146104a5578063fc2e05c5146104c5578063ff3bf644146104ec57600080fd5b8063df38461e14610452578063eec40a3914610472578063fb1466f11461048557600080fd5b8063cc60c413116100bd578063cc60c4131461040c578063d547741f1461042c578063d7d9b08c1461043f57600080fd5b8063a217fddf146103de578063acab5c1c146103e6578063c84e77cb146103f957600080fd5b80632f2ff15d116101455780636cb69f421161011f5780636cb69f42146102d757806391d1485414610387578063990bb9da146103cb57600080fd5b80632f2ff15d1461027d57806336568abe14610290578063548e75a9146102a357600080fd5b80631bf4026a116101765780631bf4026a14610232578063248a9ca3146102475780632b1ea8c61461026a57600080fd5b806301a0704c1461019d57806301ffc9a7146101c35780630f45cc81146101e6575b600080fd5b6101b06101ab366004613073565b6104ff565b6040519081526020015b60405180910390f35b6101d66101d13660046130b5565b610532565b60405190151581526020016101ba565b61020d7f000000000000000000000000104e363ac6521e55a24ae724855362acec3febe681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b61024561024036600461313c565b6105cb565b005b6101b06102553660046131ad565b60009081526020819052604090206001015490565b6102456102783660046131df565b610744565b61024561028b36600461321e565b610c3d565b61024561029e36600461321e565b610c68565b6102b66102b13660046131df565b610cc6565b6040516fffffffffffffffffffffffffffffffff90911681526020016101ba565b610348604080516060810182526000808252602082018190529181019190915250604080516060810182526001546fffffffffffffffffffffffffffffffff8082168352600254166020830152700100000000000000000000000000000000900463ffffffff169181019190915290565b6040805182516fffffffffffffffffffffffffffffffff9081168252602080850151909116908201529181015163ffffffff16908201526060016101ba565b6101d661039536600461321e565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102456103d936600461324a565b610e3d565b6101b0600081565b6102456103f4366004613321565b611072565b6102b66104073660046131df565b6112fe565b61041f61041a3660046131ad565b6113f9565b6040516101ba91906133f4565b61024561043a36600461321e565b6114f6565b61024561044d36600461313c565b61151b565b6104656104603660046131df565b61165f565b6040516101ba91906135f4565b610245610480366004613607565b6118de565b61049861049336600461363d565b611a26565b6040516101ba9190613667565b6104b86104b3366004613607565b611bcd565b6040516101ba91906136ea565b6101b07f45504f43485f4d414e414745525f524f4c45000000000000000000000000000081565b6102456104fa366004613761565b611cae565b600082826040516020016105149291906138b5565b60405160208183030381529060405280519060200120905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105c557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f45504f43485f4d414e414745525f524f4c4500000000000000000000000000006105f581611f39565b60055460ff1615610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f7765640000000000000060448201526064015b60405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b63ffffffff81168311156107145761070286868363ffffffff168181106106be576106be6138c9565b90506020020160208101906106d391906138f8565b85858463ffffffff168181106106eb576106eb6138c9565b90506020028101906106fd9190613913565b611f46565b8061070c816139a7565b915050610695565b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b60055460ff16156107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905563ffffffff811615801590610811575060015463ffffffff700100000000000000000000000000000000909104811690821611155b610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b6000610882826112fe565b90506000816fffffffffffffffffffffffffffffffff1611610900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c453a204e6f2066756e647320746f20636c61696d0000000000000000000000604482015260640161065e565b63ffffffff82166000908152600360205260409020600260038083015460ff169081111561093057610930613407565b14610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4c453a204e6f7420696e2072656c656173696e67207374616765000000000000604482015260640161065e565b6000600460006109a984600201612051565b815260208101919091526040016000206001015473ffffffffffffffffffffffffffffffffffffffff1690506109de84610cc6565b82546fffffffffffffffffffffffffffffffff9182167001000000000000000000000000000000000291161782556040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000104e363ac6521e55a24ae724855362acec3febe6169063a9059cbb90610ab3908490879060040173ffffffffffffffffffffffffffffffffffffffff9290921682526fffffffffffffffffffffffffffffffff16602082015260400190565b6020604051808303816000875af1158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af691906139cc565b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c453a205472616e73666572206661696c656400000000000000000000000000604482015260640161065e565b81546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092041603610bbc57600382810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690911790555b60028054849190600090610be39084906fffffffffffffffffffffffffffffffff166139ee565b82546fffffffffffffffffffffffffffffffff9182166101009390930a92830291909202199091161790555050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b600082815260208190526040902060010154610c5881611f39565b610c628383612081565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610cb7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc1828261217d565b505050565b63ffffffff81166000818152600360205260408120909115801590610d0b575060015463ffffffff700100000000000000000000000000000000909104811690841611155b610d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b600260038083015460ff1690811115610d8c57610d8c613407565b1015610d9b5750600092915050565b600181015467ffffffffffffffff16421115610e37576001810154600090610dcd9067ffffffffffffffff1642613a16565b6001830154909150600090610dfb9067ffffffffffffffff8082169168010000000000000000900416613a29565b67ffffffffffffffff16905080821115610e13578091505b8254610e32906fffffffffffffffffffffffffffffffff168383612238565b935050505b50919050565b7f45504f43485f4d414e414745525f524f4c450000000000000000000000000000610e6781611f39565b60055460ff1615610ed4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558786148015610f0d57508584145b8015610f1857508382145b610f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c453a20556e657175616c206c656e6774680000000000000000000000000000604482015260640161065e565b60005b8881101561103e576110368a8a83818110610f9e57610f9e6138c9565b9050602002016020810190610fb39190613a49565b898984818110610fc557610fc56138c9565b9050602002016020810190610fda91906131df565b63ffffffff16888885818110610ff257610ff26138c9565b905060200201602081019061100791906131df565b63ffffffff1687878681811061101f5761101f6138c9565b90506020028101906110319190613913565b61230b565b600101610f81565b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050505050505050565b60055460ff16156110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600061111683836104ff565b600081815260046020526040902060018101549192509073ffffffffffffffffffffffffffffffffffffffff1633146111ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4c453a204e6f2041757468000000000000000000000000000000000000000000604482015260640161065e565b73ffffffffffffffffffffffffffffffffffffffff8516611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c453a20496e76616c6964207265636569766572206164647265737300000000604482015260640161065e565b6001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905560405161127a9085908590613a7b565b6040805191829003822033835273ffffffffffffffffffffffffffffffffffffffff88166020840152917fd6dfc3916d4a5b81becd15700981576e1687000c5fa61f4b7e142b056e219161910160405180910390a25050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b6000808263ffffffff16118015611335575060015463ffffffff700100000000000000000000000000000000909104811690831611155b61139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b60006113a683610cc6565b63ffffffff841660009081526003602052604090208054919250906113f19070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683613a8b565b949350505050565b6040805160608082018352815260006020820181905291810191909152600082815260046020908152604091829020825181546080938102820184019094526060810184815290939192849284918401828280156114a257602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116114655790505b50505091835250506001919091015473ffffffffffffffffffffffffffffffffffffffff8116602083015274010000000000000000000000000000000000000000900460ff16151560409091015292915050565b60008281526020819052604090206001015461151181611f39565b610c62838361217d565b7f45504f43485f4d414e414745525f524f4c45000000000000000000000000000061154581611f39565b60055460ff16156115b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b63ffffffff81168311156107145761164d86868363ffffffff16818110611609576116096138c9565b905060200201602081019061161e91906138f8565b85858463ffffffff16818110611636576116366138c9565b90506020028101906116489190613913565b612664565b80611657816139a7565b9150506115e0565b604080516101208101825260008082526060602083018190529282018190529181018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915260008263ffffffff161180156116df575060015463ffffffff700100000000000000000000000000000000909104811690831611155b611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b63ffffffff821660009081526003602052604081209061176484610cc6565b90506000611771856112fe565b83549091506000906117969084906fffffffffffffffffffffffffffffffff16613a8b565b90506040518061012001604052808560030160009054906101000a900460ff1660038111156117c7576117c7613407565b81526020018560020180546117db90613ab3565b80601f016020809104026020016040519081016040528092919081815260200182805461180790613ab3565b80156118545780601f1061182957610100808354040283529160200191611854565b820191906000526020600020905b81548152906001019060200180831161183757829003601f168201915b505050918352505085546fffffffffffffffffffffffffffffffff808216602084015260019097015467ffffffffffffffff80821660408501526801000000000000000090910416606083015270010000000000000000000000000000000090048616608082015292851660a084015292841660c083015290921660e09092019190915292915050565b7f45504f43485f4d414e414745525f524f4c45000000000000000000000000000061190881611f39565b60055460ff1615611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b63ffffffff81168311156119f8576119e684848363ffffffff168181106119cc576119cc6138c9565b90506020020160208101906119e191906131df565b6127be565b806119f0816139a7565b9150506119a3565b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b60608163ffffffff168363ffffffff161115611a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b611aa88383613b00565b611ab3906001613b1c565b63ffffffff1667ffffffffffffffff811115611ad157611ad1613b38565b604051908082528060200260200182016040528015611b6657816020015b604080516101208101825260008082526060602080840182905293830182905282018190526080820181905260a0820181905260c0820181905260e0820181905261010082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611aef5790505b509050825b8263ffffffff168163ffffffff1611611bc657611b878161165f565b82611b928684613b00565b63ffffffff1681518110611ba857611ba86138c9565b60200260200101819052508080611bbe906139a7565b915050611b6b565b5092915050565b60608167ffffffffffffffff811115611be857611be8613b38565b604051908082528060200260200182016040528015611c5157816020015b60408051606080820183528152600060208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611c065790505b50905060005b82811015611bc657611c8961041a858584818110611c7757611c776138c9565b90506020028101906101ab9190613913565b828281518110611c9b57611c9b6138c9565b6020908102919091010152600101611c57565b7f45504f43485f4d414e414745525f524f4c450000000000000000000000000000611cd881611f39565b60055460ff1615611d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558988148015611d7e57508786145b8015611d8957508584145b8015611d9457508382145b611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c453a20556e657175616c206c656e6774680000000000000000000000000000604482015260640161065e565b60005b63ffffffff81168b1115611f0357611ef18c8c8363ffffffff16818110611e2657611e266138c9565b9050602002016020810190611e3b91906131df565b8b8b8463ffffffff16818110611e5357611e536138c9565b9050602002016020810190611e689190613a49565b8a8a8563ffffffff16818110611e8057611e806138c9565b9050602002016020810190611e959190613b67565b89898663ffffffff16818110611ead57611ead6138c9565b9050602002016020810190611ec29190613b67565b88888763ffffffff16818110611eda57611eda6138c9565b9050602002810190611eec9190613913565b612982565b80611efb816139a7565b915050611dfd565b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050505050505050565b611f438133612fa0565b50565b6000611f5283836104ff565b600081815260046020526040902060018101549192509073ffffffffffffffffffffffffffffffffffffffff8681169116148015611fa5575073ffffffffffffffffffffffffffffffffffffffff851615155b61200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c453a20446f75626c6520636865636b206572726f7200000000000000000000604482015260640161065e565b60010180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905550505050565b6000816040516020016120649190613b91565b604051602081830303815290604052805190602001209050919050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166121755760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121133390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105c5565b5060006105c5565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156121755760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105c5565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050806000036122905783828161228657612286613c3b565b0492505050612304565b80841161229c57600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600180546000919060109061233990700100000000000000000000000000000000900463ffffffff166139a7565b825463ffffffff8281166101009490940a848102910219909116179092556000908152600360205260409081902090517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526fffffffffffffffffffffffffffffffff891660448201529192509073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000104e363ac6521e55a24ae724855362acec3febe616906323b872dd906064016020604051808303816000875af1158015612414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243891906139cc565b61249e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4c453a20546f6b656e207472616e73666572206661696c656400000000000000604482015260640161065e565b8467ffffffffffffffff168667ffffffffffffffff161061251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c52543a2054696d65206572726f722e00000000000000000000000000000000604482015260640161065e565b80546fffffffffffffffffffffffffffffffff88167fffffffffffffffffffffffffffffffff0000000000000000000000000000000091821617825560018201805467ffffffffffffffff8881166801000000000000000002919093169289169290921791909117905560028101612594848683613cb8565b506003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560006125ce85856104ff565b60008181526004602081815260408084208054600181018255908552919093206008820401805463ffffffff808a1660079094169094026101000a83810294021916929092179091559051919250907f45c6b311f2946239ca2508a94835ab508e2b8bd683b6bb14c2910322e598f9bc90612652908b908b908b908b908b90613dd2565b60405180910390a25050505050505050565b600061267083836104ff565b600081815260046020526040902060018101549192509074010000000000000000000000000000000000000000900460ff1615612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c453a205265636569766572206164647265737320636f6e6669726d65640000604482015260640161065e565b6001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905560405161275b9085908590613a7b565b60408051918290038220600184015473ffffffffffffffffffffffffffffffffffffffff908116845288166020840152917f9c9039cce6bde59b5f0031300888782ad8e9e65f07ab7660da8398bdc8019938910160405180910390a25050505050565b60008163ffffffff161180156127f4575060015463ffffffff700100000000000000000000000000000000909104811690821611155b61285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b63ffffffff81166000908152600360205260409020600160038083015460ff169081111561288a5761288a613407565b146128f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c453a20416c7265616479205374617274656400000000000000000000000000604482015260640161065e565b6003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660021790558054600180546fffffffffffffffffffffffffffffffff92831692600091612948918591166139ee565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050565b63ffffffff86166000908152600360205260409020600160038083015460ff16908111156129b2576129b2613407565b14612a19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c453a20416c7265616479205374617274656400000000000000000000000000604482015260640161065e565b80546fffffffffffffffffffffffffffffffff9081169087161115612b6b578054600090612a59906fffffffffffffffffffffffffffffffff1688613a8b565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526fffffffffffffffffffffffffffffffff821660448201529091507f000000000000000000000000104e363ac6521e55a24ae724855362acec3febe673ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af1158015612b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2a91906139cc565b505080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff8716178155612cb4565b80546fffffffffffffffffffffffffffffffff9081169087161015612cb4578054600090612bac9088906fffffffffffffffffffffffffffffffff16613a8b565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526fffffffffffffffffffffffffffffffff821660248201529091507f000000000000000000000000104e363ac6521e55a24ae724855362acec3febe673ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af1158015612c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7791906139cc565b505080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff87161781555b8367ffffffffffffffff168567ffffffffffffffff1610612d31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c52543a2054696d65206572726f722e00000000000000000000000000000000604482015260640161065e565b60018101805467ffffffffffffffff86811668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216908816171790556000612d8584846104ff565b90506000612d9583600201612051565b9050808214612f4f576000818152600460205260408120905b8154811015612ef6578a63ffffffff16826000018281548110612dd357612dd36138c9565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1603612eee5781548290612e0c90600190613a16565b81548110612e1c57612e1c6138c9565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16826000018281548110612e5757612e576138c9565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555081600001805480612e9d57612e9d613e29565b60008281526020902060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191820401805463ffffffff600460078516026101000a02191690559055612ef6565b600101612dae565b5060008381526004602081815260408320805460018101825590845292206008830401805463ffffffff808f1660079095169093026101000a938402929093021990921617905560028401612f4c868883613cb8565b50505b8863ffffffff167f426fa9f6edaf285d39f9b1e4c856e832716e028aed8af36999b6cf3133ef9ab58989898989604051612f8d959493929190613dd2565b60405180910390a2505050505050505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16613026576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440161065e565b5050565b60008083601f84011261303c57600080fd5b50813567ffffffffffffffff81111561305457600080fd5b60208301915083602082850101111561306c57600080fd5b9250929050565b6000806020838503121561308657600080fd5b823567ffffffffffffffff81111561309d57600080fd5b6130a98582860161302a565b90969095509350505050565b6000602082840312156130c757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461230457600080fd5b60008083601f84011261310957600080fd5b50813567ffffffffffffffff81111561312157600080fd5b6020830191508360208260051b850101111561306c57600080fd5b6000806000806040858703121561315257600080fd5b843567ffffffffffffffff81111561316957600080fd5b613175878288016130f7565b909550935050602085013567ffffffffffffffff81111561319557600080fd5b6131a1878288016130f7565b95989497509550505050565b6000602082840312156131bf57600080fd5b5035919050565b803563ffffffff811681146131da57600080fd5b919050565b6000602082840312156131f157600080fd5b612304826131c6565b803573ffffffffffffffffffffffffffffffffffffffff811681146131da57600080fd5b6000806040838503121561323157600080fd5b82359150613241602084016131fa565b90509250929050565b6000806000806000806000806080898b03121561326657600080fd5b883567ffffffffffffffff81111561327d57600080fd5b6132898b828c016130f7565b909950975050602089013567ffffffffffffffff8111156132a957600080fd5b6132b58b828c016130f7565b909750955050604089013567ffffffffffffffff8111156132d557600080fd5b6132e18b828c016130f7565b909550935050606089013567ffffffffffffffff81111561330157600080fd5b61330d8b828c016130f7565b999c989b5096995094979396929594505050565b60008060006040848603121561333657600080fd5b61333f846131fa565b9250602084013567ffffffffffffffff81111561335b57600080fd5b6133678682870161302a565b9497909650939450505050565b80516060808452815190840181905260009160200190829060808601905b808310156133bb5763ffffffff8451168252602082019150602084019350600183019250613392565b5073ffffffffffffffffffffffffffffffffffffffff602086015116602087015260408501511515604087015280935050505092915050565b6020815260006123046020830184613374565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061346d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6000815180845260005b818110156134975760208185018101518683018201520161347b565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6134e0828251613436565b6000602082015161012060208501526134fd610120850182613471565b9050604083015161352260408601826fffffffffffffffffffffffffffffffff169052565b50606083015161353e606086018267ffffffffffffffff169052565b50608083015161355a608086018267ffffffffffffffff169052565b5060a083015161357e60a08601826fffffffffffffffffffffffffffffffff169052565b5060c08301516135a260c08601826fffffffffffffffffffffffffffffffff169052565b5060e08301516135c660e08601826fffffffffffffffffffffffffffffffff169052565b506101008301516135ec6101008601826fffffffffffffffffffffffffffffffff169052565b509392505050565b60208152600061230460208301846134d5565b6000806020838503121561361a57600080fd5b823567ffffffffffffffff81111561363157600080fd5b6130a9858286016130f7565b6000806040838503121561365057600080fd5b613659836131c6565b9150613241602084016131c6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156136de577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526136c98583516134d5565b9450602093840193919091019060010161368f565b50929695505050505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156136de577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261374c858351613374565b94506020938401939190910190600101613712565b60008060008060008060008060008060a08b8d03121561378057600080fd5b8a3567ffffffffffffffff81111561379757600080fd5b6137a38d828e016130f7565b909b5099505060208b013567ffffffffffffffff8111156137c357600080fd5b6137cf8d828e016130f7565b90995097505060408b013567ffffffffffffffff8111156137ef57600080fd5b6137fb8d828e016130f7565b90975095505060608b013567ffffffffffffffff81111561381b57600080fd5b6138278d828e016130f7565b90955093505060808b013567ffffffffffffffff81111561384757600080fd5b6138538d828e016130f7565b915080935050809150509295989b9194979a5092959850565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006113f160208301848661386c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561390a57600080fd5b612304826131fa565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261394857600080fd5b83018035915067ffffffffffffffff82111561396357600080fd5b60200191503681900382131561306c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff821663ffffffff81036139c3576139c3613978565b60010192915050565b6000602082840312156139de57600080fd5b8151801515811461230457600080fd5b6fffffffffffffffffffffffffffffffff81811683821601908111156105c5576105c5613978565b818103818111156105c5576105c5613978565b67ffffffffffffffff82811682821603908111156105c5576105c5613978565b600060208284031215613a5b57600080fd5b81356fffffffffffffffffffffffffffffffff8116811461230457600080fd5b8183823760009101908152919050565b6fffffffffffffffffffffffffffffffff82811682821603908111156105c5576105c5613978565b600181811c90821680613ac757607f821691505b602082108103610e37577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b63ffffffff82811682821603908111156105c5576105c5613978565b63ffffffff81811683821601908111156105c5576105c5613978565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215613b7957600080fd5b813567ffffffffffffffff8116811461230457600080fd5b602081526000808354613ba381613ab3565b8060208601526001821660008114613bc25760018114613bfc57613c30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166040870152604082151560051b8701019350613c30565b86600052602060002060005b83811015613c2757815488820160400152600190910190602001613c08565b87016040019450505b509195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b601f821115610cc157806000526020600020601f840160051c81016020851015613c915750805b601f840160051c820191505b81811015613cb15760008155600101613c9d565b5050505050565b67ffffffffffffffff831115613cd057613cd0613b38565b613ce483613cde8354613ab3565b83613c6a565b6000601f841160018114613d365760008515613d005750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613cb1565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613d855786850135825560209485019460019092019101613d65565b5086821015613dc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6fffffffffffffffffffffffffffffffff8616815267ffffffffffffffff8516602082015267ffffffffffffffff84166040820152608060608201526000613e1e60808301848661386c565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b44ab4d51ac83264ea865cf9cf43651c07a93a3c09902d82a027b4bf8c49e74d64736f6c634300081a0033
0x60a060405234801561001057600080fd5b50604051613fed380380613fed83398101604081905261002f916100f8565b61003a60003361004c565b506001600160a01b0316608052610128565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166100ee576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556100a63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016100f2565b5060005b92915050565b60006020828403121561010a57600080fd5b81516001600160a01b038116811461012157600080fd5b9392505050565b608051613e8e61015f600039600081816101eb01528181610a49015281816123cb01528181612aa80152612bf50152613e8e6000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063a217fddf116100e3578063df38461e1161008c578063fb81dff111610066578063fb81dff1146104a5578063fc2e05c5146104c5578063ff3bf644146104ec57600080fd5b8063df38461e14610452578063eec40a3914610472578063fb1466f11461048557600080fd5b8063cc60c413116100bd578063cc60c4131461040c578063d547741f1461042c578063d7d9b08c1461043f57600080fd5b8063a217fddf146103de578063acab5c1c146103e6578063c84e77cb146103f957600080fd5b80632f2ff15d116101455780636cb69f421161011f5780636cb69f42146102d757806391d1485414610387578063990bb9da146103cb57600080fd5b80632f2ff15d1461027d57806336568abe14610290578063548e75a9146102a357600080fd5b80631bf4026a116101765780631bf4026a14610232578063248a9ca3146102475780632b1ea8c61461026a57600080fd5b806301a0704c1461019d57806301ffc9a7146101c35780630f45cc81146101e6575b600080fd5b6101b06101ab366004613073565b6104ff565b6040519081526020015b60405180910390f35b6101d66101d13660046130b5565b610532565b60405190151581526020016101ba565b61020d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b61024561024036600461313c565b6105cb565b005b6101b06102553660046131ad565b60009081526020819052604090206001015490565b6102456102783660046131df565b610744565b61024561028b36600461321e565b610c3d565b61024561029e36600461321e565b610c68565b6102b66102b13660046131df565b610cc6565b6040516fffffffffffffffffffffffffffffffff90911681526020016101ba565b610348604080516060810182526000808252602082018190529181019190915250604080516060810182526001546fffffffffffffffffffffffffffffffff8082168352600254166020830152700100000000000000000000000000000000900463ffffffff169181019190915290565b6040805182516fffffffffffffffffffffffffffffffff9081168252602080850151909116908201529181015163ffffffff16908201526060016101ba565b6101d661039536600461321e565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102456103d936600461324a565b610e3d565b6101b0600081565b6102456103f4366004613321565b611072565b6102b66104073660046131df565b6112fe565b61041f61041a3660046131ad565b6113f9565b6040516101ba91906133f4565b61024561043a36600461321e565b6114f6565b61024561044d36600461313c565b61151b565b6104656104603660046131df565b61165f565b6040516101ba91906135f4565b610245610480366004613607565b6118de565b61049861049336600461363d565b611a26565b6040516101ba9190613667565b6104b86104b3366004613607565b611bcd565b6040516101ba91906136ea565b6101b07f45504f43485f4d414e414745525f524f4c45000000000000000000000000000081565b6102456104fa366004613761565b611cae565b600082826040516020016105149291906138b5565b60405160208183030381529060405280519060200120905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105c557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f45504f43485f4d414e414745525f524f4c4500000000000000000000000000006105f581611f39565b60055460ff1615610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f7765640000000000000060448201526064015b60405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b63ffffffff81168311156107145761070286868363ffffffff168181106106be576106be6138c9565b90506020020160208101906106d391906138f8565b85858463ffffffff168181106106eb576106eb6138c9565b90506020028101906106fd9190613913565b611f46565b8061070c816139a7565b915050610695565b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b60055460ff16156107b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905563ffffffff811615801590610811575060015463ffffffff700100000000000000000000000000000000909104811690821611155b610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b6000610882826112fe565b90506000816fffffffffffffffffffffffffffffffff1611610900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4c453a204e6f2066756e647320746f20636c61696d0000000000000000000000604482015260640161065e565b63ffffffff82166000908152600360205260409020600260038083015460ff169081111561093057610930613407565b14610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4c453a204e6f7420696e2072656c656173696e67207374616765000000000000604482015260640161065e565b6000600460006109a984600201612051565b815260208101919091526040016000206001015473ffffffffffffffffffffffffffffffffffffffff1690506109de84610cc6565b82546fffffffffffffffffffffffffffffffff9182167001000000000000000000000000000000000291161782556040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90610ab3908490879060040173ffffffffffffffffffffffffffffffffffffffff9290921682526fffffffffffffffffffffffffffffffff16602082015260400190565b6020604051808303816000875af1158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af691906139cc565b610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c453a205472616e73666572206661696c656400000000000000000000000000604482015260640161065e565b81546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092041603610bbc57600382810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690911790555b60028054849190600090610be39084906fffffffffffffffffffffffffffffffff166139ee565b82546fffffffffffffffffffffffffffffffff9182166101009390930a92830291909202199091161790555050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b600082815260208190526040902060010154610c5881611f39565b610c628383612081565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610cb7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc1828261217d565b505050565b63ffffffff81166000818152600360205260408120909115801590610d0b575060015463ffffffff700100000000000000000000000000000000909104811690841611155b610d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b600260038083015460ff1690811115610d8c57610d8c613407565b1015610d9b5750600092915050565b600181015467ffffffffffffffff16421115610e37576001810154600090610dcd9067ffffffffffffffff1642613a16565b6001830154909150600090610dfb9067ffffffffffffffff8082169168010000000000000000900416613a29565b67ffffffffffffffff16905080821115610e13578091505b8254610e32906fffffffffffffffffffffffffffffffff168383612238565b935050505b50919050565b7f45504f43485f4d414e414745525f524f4c450000000000000000000000000000610e6781611f39565b60055460ff1615610ed4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558786148015610f0d57508584145b8015610f1857508382145b610f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c453a20556e657175616c206c656e6774680000000000000000000000000000604482015260640161065e565b60005b8881101561103e576110368a8a83818110610f9e57610f9e6138c9565b9050602002016020810190610fb39190613a49565b898984818110610fc557610fc56138c9565b9050602002016020810190610fda91906131df565b63ffffffff16888885818110610ff257610ff26138c9565b905060200201602081019061100791906131df565b63ffffffff1687878681811061101f5761101f6138c9565b90506020028101906110319190613913565b61230b565b600101610f81565b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050505050505050565b60055460ff16156110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600061111683836104ff565b600081815260046020526040902060018101549192509073ffffffffffffffffffffffffffffffffffffffff1633146111ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4c453a204e6f2041757468000000000000000000000000000000000000000000604482015260640161065e565b73ffffffffffffffffffffffffffffffffffffffff8516611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c453a20496e76616c6964207265636569766572206164647265737300000000604482015260640161065e565b6001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905560405161127a9085908590613a7b565b6040805191829003822033835273ffffffffffffffffffffffffffffffffffffffff88166020840152917fd6dfc3916d4a5b81becd15700981576e1687000c5fa61f4b7e142b056e219161910160405180910390a25050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b6000808263ffffffff16118015611335575060015463ffffffff700100000000000000000000000000000000909104811690831611155b61139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b60006113a683610cc6565b63ffffffff841660009081526003602052604090208054919250906113f19070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683613a8b565b949350505050565b6040805160608082018352815260006020820181905291810191909152600082815260046020908152604091829020825181546080938102820184019094526060810184815290939192849284918401828280156114a257602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116114655790505b50505091835250506001919091015473ffffffffffffffffffffffffffffffffffffffff8116602083015274010000000000000000000000000000000000000000900460ff16151560409091015292915050565b60008281526020819052604090206001015461151181611f39565b610c62838361217d565b7f45504f43485f4d414e414745525f524f4c45000000000000000000000000000061154581611f39565b60055460ff16156115b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b63ffffffff81168311156107145761164d86868363ffffffff16818110611609576116096138c9565b905060200201602081019061161e91906138f8565b85858463ffffffff16818110611636576116366138c9565b90506020028101906116489190613913565b612664565b80611657816139a7565b9150506115e0565b604080516101208101825260008082526060602083018190529282018190529181018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915260008263ffffffff161180156116df575060015463ffffffff700100000000000000000000000000000000909104811690831611155b611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b63ffffffff821660009081526003602052604081209061176484610cc6565b90506000611771856112fe565b83549091506000906117969084906fffffffffffffffffffffffffffffffff16613a8b565b90506040518061012001604052808560030160009054906101000a900460ff1660038111156117c7576117c7613407565b81526020018560020180546117db90613ab3565b80601f016020809104026020016040519081016040528092919081815260200182805461180790613ab3565b80156118545780601f1061182957610100808354040283529160200191611854565b820191906000526020600020905b81548152906001019060200180831161183757829003601f168201915b505050918352505085546fffffffffffffffffffffffffffffffff808216602084015260019097015467ffffffffffffffff80821660408501526801000000000000000090910416606083015270010000000000000000000000000000000090048616608082015292851660a084015292841660c083015290921660e09092019190915292915050565b7f45504f43485f4d414e414745525f524f4c45000000000000000000000000000061190881611f39565b60055460ff1615611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b63ffffffff81168311156119f8576119e684848363ffffffff168181106119cc576119cc6138c9565b90506020020160208101906119e191906131df565b6127be565b806119f0816139a7565b9150506119a3565b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b60608163ffffffff168363ffffffff161115611a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b611aa88383613b00565b611ab3906001613b1c565b63ffffffff1667ffffffffffffffff811115611ad157611ad1613b38565b604051908082528060200260200182016040528015611b6657816020015b604080516101208101825260008082526060602080840182905293830182905282018190526080820181905260a0820181905260c0820181905260e0820181905261010082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611aef5790505b509050825b8263ffffffff168163ffffffff1611611bc657611b878161165f565b82611b928684613b00565b63ffffffff1681518110611ba857611ba86138c9565b60200260200101819052508080611bbe906139a7565b915050611b6b565b5092915050565b60608167ffffffffffffffff811115611be857611be8613b38565b604051908082528060200260200182016040528015611c5157816020015b60408051606080820183528152600060208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611c065790505b50905060005b82811015611bc657611c8961041a858584818110611c7757611c776138c9565b90506020028101906101ab9190613913565b828281518110611c9b57611c9b6138c9565b6020908102919091010152600101611c57565b7f45504f43485f4d414e414745525f524f4c450000000000000000000000000000611cd881611f39565b60055460ff1615611d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265656e7472616e6379206973206e6f7420616c6c6f77656400000000000000604482015260640161065e565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558988148015611d7e57508786145b8015611d8957508584145b8015611d9457508382145b611dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4c453a20556e657175616c206c656e6774680000000000000000000000000000604482015260640161065e565b60005b63ffffffff81168b1115611f0357611ef18c8c8363ffffffff16818110611e2657611e266138c9565b9050602002016020810190611e3b91906131df565b8b8b8463ffffffff16818110611e5357611e536138c9565b9050602002016020810190611e689190613a49565b8a8a8563ffffffff16818110611e8057611e806138c9565b9050602002016020810190611e959190613b67565b89898663ffffffff16818110611ead57611ead6138c9565b9050602002016020810190611ec29190613b67565b88888763ffffffff16818110611eda57611eda6138c9565b9050602002810190611eec9190613913565b612982565b80611efb816139a7565b915050611dfd565b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050505050505050565b611f438133612fa0565b50565b6000611f5283836104ff565b600081815260046020526040902060018101549192509073ffffffffffffffffffffffffffffffffffffffff8681169116148015611fa5575073ffffffffffffffffffffffffffffffffffffffff851615155b61200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c453a20446f75626c6520636865636b206572726f7200000000000000000000604482015260640161065e565b60010180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905550505050565b6000816040516020016120649190613b91565b604051602081830303815290604052805190602001209050919050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166121755760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121133390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105c5565b5060006105c5565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156121755760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105c5565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050806000036122905783828161228657612286613c3b565b0492505050612304565b80841161229c57600080fd5b600084868809851960019081018716968790049682860381900495909211909303600082900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b600180546000919060109061233990700100000000000000000000000000000000900463ffffffff166139a7565b825463ffffffff8281166101009490940a848102910219909116179092556000908152600360205260409081902090517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526fffffffffffffffffffffffffffffffff891660448201529192509073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af1158015612414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243891906139cc565b61249e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4c453a20546f6b656e207472616e73666572206661696c656400000000000000604482015260640161065e565b8467ffffffffffffffff168667ffffffffffffffff161061251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c52543a2054696d65206572726f722e00000000000000000000000000000000604482015260640161065e565b80546fffffffffffffffffffffffffffffffff88167fffffffffffffffffffffffffffffffff0000000000000000000000000000000091821617825560018201805467ffffffffffffffff8881166801000000000000000002919093169289169290921791909117905560028101612594848683613cb8565b506003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560006125ce85856104ff565b60008181526004602081815260408084208054600181018255908552919093206008820401805463ffffffff808a1660079094169094026101000a83810294021916929092179091559051919250907f45c6b311f2946239ca2508a94835ab508e2b8bd683b6bb14c2910322e598f9bc90612652908b908b908b908b908b90613dd2565b60405180910390a25050505050505050565b600061267083836104ff565b600081815260046020526040902060018101549192509074010000000000000000000000000000000000000000900460ff1615612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c453a205265636569766572206164647265737320636f6e6669726d65640000604482015260640161065e565b6001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905560405161275b9085908590613a7b565b60408051918290038220600184015473ffffffffffffffffffffffffffffffffffffffff908116845288166020840152917f9c9039cce6bde59b5f0031300888782ad8e9e65f07ab7660da8398bdc8019938910160405180910390a25050505050565b60008163ffffffff161180156127f4575060015463ffffffff700100000000000000000000000000000000909104811690821611155b61285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c453a20496e76616c69642065706f6368204944000000000000000000000000604482015260640161065e565b63ffffffff81166000908152600360205260409020600160038083015460ff169081111561288a5761288a613407565b146128f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c453a20416c7265616479205374617274656400000000000000000000000000604482015260640161065e565b6003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660021790558054600180546fffffffffffffffffffffffffffffffff92831692600091612948918591166139ee565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050565b63ffffffff86166000908152600360205260409020600160038083015460ff16908111156129b2576129b2613407565b14612a19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4c453a20416c7265616479205374617274656400000000000000000000000000604482015260640161065e565b80546fffffffffffffffffffffffffffffffff9081169087161115612b6b578054600090612a59906fffffffffffffffffffffffffffffffff1688613a8b565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526fffffffffffffffffffffffffffffffff821660448201529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af1158015612b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2a91906139cc565b505080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff8716178155612cb4565b80546fffffffffffffffffffffffffffffffff9081169087161015612cb4578054600090612bac9088906fffffffffffffffffffffffffffffffff16613a8b565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526fffffffffffffffffffffffffffffffff821660248201529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af1158015612c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7791906139cc565b505080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff87161781555b8367ffffffffffffffff168567ffffffffffffffff1610612d31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c52543a2054696d65206572726f722e00000000000000000000000000000000604482015260640161065e565b60018101805467ffffffffffffffff86811668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216908816171790556000612d8584846104ff565b90506000612d9583600201612051565b9050808214612f4f576000818152600460205260408120905b8154811015612ef6578a63ffffffff16826000018281548110612dd357612dd36138c9565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1603612eee5781548290612e0c90600190613a16565b81548110612e1c57612e1c6138c9565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16826000018281548110612e5757612e576138c9565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555081600001805480612e9d57612e9d613e29565b60008281526020902060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191820401805463ffffffff600460078516026101000a02191690559055612ef6565b600101612dae565b5060008381526004602081815260408320805460018101825590845292206008830401805463ffffffff808f1660079095169093026101000a938402929093021990921617905560028401612f4c868883613cb8565b50505b8863ffffffff167f426fa9f6edaf285d39f9b1e4c856e832716e028aed8af36999b6cf3133ef9ab58989898989604051612f8d959493929190613dd2565b60405180910390a2505050505050505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16613026576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440161065e565b5050565b60008083601f84011261303c57600080fd5b50813567ffffffffffffffff81111561305457600080fd5b60208301915083602082850101111561306c57600080fd5b9250929050565b6000806020838503121561308657600080fd5b823567ffffffffffffffff81111561309d57600080fd5b6130a98582860161302a565b90969095509350505050565b6000602082840312156130c757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461230457600080fd5b60008083601f84011261310957600080fd5b50813567ffffffffffffffff81111561312157600080fd5b6020830191508360208260051b850101111561306c57600080fd5b6000806000806040858703121561315257600080fd5b843567ffffffffffffffff81111561316957600080fd5b613175878288016130f7565b909550935050602085013567ffffffffffffffff81111561319557600080fd5b6131a1878288016130f7565b95989497509550505050565b6000602082840312156131bf57600080fd5b5035919050565b803563ffffffff811681146131da57600080fd5b919050565b6000602082840312156131f157600080fd5b612304826131c6565b803573ffffffffffffffffffffffffffffffffffffffff811681146131da57600080fd5b6000806040838503121561323157600080fd5b82359150613241602084016131fa565b90509250929050565b6000806000806000806000806080898b03121561326657600080fd5b883567ffffffffffffffff81111561327d57600080fd5b6132898b828c016130f7565b909950975050602089013567ffffffffffffffff8111156132a957600080fd5b6132b58b828c016130f7565b909750955050604089013567ffffffffffffffff8111156132d557600080fd5b6132e18b828c016130f7565b909550935050606089013567ffffffffffffffff81111561330157600080fd5b61330d8b828c016130f7565b999c989b5096995094979396929594505050565b60008060006040848603121561333657600080fd5b61333f846131fa565b9250602084013567ffffffffffffffff81111561335b57600080fd5b6133678682870161302a565b9497909650939450505050565b80516060808452815190840181905260009160200190829060808601905b808310156133bb5763ffffffff8451168252602082019150602084019350600183019250613392565b5073ffffffffffffffffffffffffffffffffffffffff602086015116602087015260408501511515604087015280935050505092915050565b6020815260006123046020830184613374565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061346d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6000815180845260005b818110156134975760208185018101518683018201520161347b565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6134e0828251613436565b6000602082015161012060208501526134fd610120850182613471565b9050604083015161352260408601826fffffffffffffffffffffffffffffffff169052565b50606083015161353e606086018267ffffffffffffffff169052565b50608083015161355a608086018267ffffffffffffffff169052565b5060a083015161357e60a08601826fffffffffffffffffffffffffffffffff169052565b5060c08301516135a260c08601826fffffffffffffffffffffffffffffffff169052565b5060e08301516135c660e08601826fffffffffffffffffffffffffffffffff169052565b506101008301516135ec6101008601826fffffffffffffffffffffffffffffffff169052565b509392505050565b60208152600061230460208301846134d5565b6000806020838503121561361a57600080fd5b823567ffffffffffffffff81111561363157600080fd5b6130a9858286016130f7565b6000806040838503121561365057600080fd5b613659836131c6565b9150613241602084016131c6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156136de577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526136c98583516134d5565b9450602093840193919091019060010161368f565b50929695505050505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156136de577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261374c858351613374565b94506020938401939190910190600101613712565b60008060008060008060008060008060a08b8d03121561378057600080fd5b8a3567ffffffffffffffff81111561379757600080fd5b6137a38d828e016130f7565b909b5099505060208b013567ffffffffffffffff8111156137c357600080fd5b6137cf8d828e016130f7565b90995097505060408b013567ffffffffffffffff8111156137ef57600080fd5b6137fb8d828e016130f7565b90975095505060608b013567ffffffffffffffff81111561381b57600080fd5b6138278d828e016130f7565b90955093505060808b013567ffffffffffffffff81111561384757600080fd5b6138538d828e016130f7565b915080935050809150509295989b9194979a5092959850565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260006113f160208301848661386c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561390a57600080fd5b612304826131fa565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261394857600080fd5b83018035915067ffffffffffffffff82111561396357600080fd5b60200191503681900382131561306c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff821663ffffffff81036139c3576139c3613978565b60010192915050565b6000602082840312156139de57600080fd5b8151801515811461230457600080fd5b6fffffffffffffffffffffffffffffffff81811683821601908111156105c5576105c5613978565b818103818111156105c5576105c5613978565b67ffffffffffffffff82811682821603908111156105c5576105c5613978565b600060208284031215613a5b57600080fd5b81356fffffffffffffffffffffffffffffffff8116811461230457600080fd5b8183823760009101908152919050565b6fffffffffffffffffffffffffffffffff82811682821603908111156105c5576105c5613978565b600181811c90821680613ac757607f821691505b602082108103610e37577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b63ffffffff82811682821603908111156105c5576105c5613978565b63ffffffff81811683821601908111156105c5576105c5613978565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215613b7957600080fd5b813567ffffffffffffffff8116811461230457600080fd5b602081526000808354613ba381613ab3565b8060208601526001821660008114613bc25760018114613bfc57613c30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166040870152604082151560051b8701019350613c30565b86600052602060002060005b83811015613c2757815488820160400152600190910190602001613c08565b87016040019450505b509195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b601f821115610cc157806000526020600020601f840160051c81016020851015613c915750805b601f840160051c820191505b81811015613cb15760008155600101613c9d565b5050505050565b67ffffffffffffffff831115613cd057613cd0613b38565b613ce483613cde8354613ab3565b83613c6a565b6000601f841160018114613d365760008515613d005750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613cb1565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613d855786850135825560209485019460019092019101613d65565b5086821015613dc0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b6fffffffffffffffffffffffffffffffff8616815267ffffffffffffffff8516602082015267ffffffffffffffff84166040820152608060608201526000613e1e60808301848661386c565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b44ab4d51ac83264ea865cf9cf43651c07a93a3c09902d82a027b4bf8c49e74d64736f6c634300081a0033000000000000000000000000104e363ac6521e55a24ae724855362acec3febe6